home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
tex
/
filters.zip
/
TRUNC.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-11-27
|
3KB
|
104 lines
Name trunc
Title
page ,132
comment /
This program is a filter that reads a file and truncates each
line at the character on the parmline or the eol char <CR>.
If there is not parameter lines will be truncated at the first
space (which includes leading spaces as well.)
/
;===================================================================
code segment public
;===================================================================
;
; command line is at 80h of psp - first byte is length
;
org 80h
parmsize db ?
parm db 7fh dup (?)
;
; .com starts at 100h - but must jump around any data area
;
org 100h ; com file starts here
assume cs:code,ds:code,es:code
trunc:
jmp clear
;===================================================================
;
; data area for .com programs
; Uncomment (**) statements and comment (&&) statements
; if you need two different buffers.
;
inchar db ?
;
;===================================================================
clear:
;
; start of actual code is here (clear)
;
;
; Read a character. If it compares to the current character of the
; parmline, loop through the end of the line (CR/LF).
;
; Check parameter line for a character. If none, insert a space.
;
cmp parmsize,2h ; if no characters, insert a space.
jge parmok
mov parm+1,' ' ; tack on the space
; These two i/o parameters are constants.
;
parmok:
lea dx,inchar ; offset of inchar
mov cx,1h ; get 1 character
again:
;
; read a character
;
xor bx,bx ; zero is handle of standard input
lea dx,inchar ; offset of inchar
mov ah,3fh ; read a file/device function
int 21h ; invoke the function
;
; if carry set of ax=0 exit
;
jc oops ; i/o error
and ax,ax ; set flags
jz oops ; eof
;
; compare character against parmline.
;
mov al,parm+1 ; load character
cmp al,inchar
jne output ; if characters don't match, output
;
; Character matched - now read characters until <cr> is seen.
;
skip:
xor bx,bx ; zero is handle of standard input
mov cx,1h ; get 1 character
mov ah,3fh ; read a file/device function
int 21h ; invoke the function
;
; if carry set of ax=0 exit
;
jc oops ; i/o error
and ax,ax ; set flags
jz oops ; eof
;
; look for <cr>
;
cmp inchar,0dh ; if inchar is <cr>, start i/o again.
jne skip ; otherwise skip it.
output:
mov bx,1h ; standard output handle
mov ah,40h ; dx still points at inchar
int 21h ; call dos output function
jmp again ; repeat cycle
oops:
int 20h ; return to dos
code ends
end trunc